// 基础类型

// 数字
let a: number = 1
// 布尔
let b: boolean = true
// 字符串
let c: string = '123'
// 数组
let arr: number[] = [1, 2, 3, 4, 5]
let arr1: Array<boolean> = [true, false, false, false,]
// 元组 
let t: [number, string] = [1, '123']
// 枚举 (映射)
enum Color {
	Red = 10,  // 不从下标0 可以指定
	Green,
	Yellow
}

console.log(Color.Red)  // => 10
console.log(Color.Green) // => 11
console.log(Color.Yellow) // => 12
console.log(Color[10])  // => Red 
console.log(Color[11])  // => Green 
console.log(Color[12])  // => Yellow


// any 类型
let anyThing: any = 123

anyThing = '1231231'
anyThing = true
anyThing = new Date()


// void 无返回
const add = () => {
	// 函数没有返回值的时候 
	// 返回值的类型 叫做 void 

	// return 123
}

// null 和 undefined
// 默认情况下null和undefined是所有类型的子类型。 就是说你可以把 null和undefined赋值给number类型的变量。
let p1: number = null

p1 = 123

let p2: undefined = undefined

let p3: any = 1
p3 = 123
p3 = '123'
p3 = []
p3 = {}
p3 = null


// Never

function add123(): never {

	throw new Error('1231')

	console.log(123)

}

// Object
// 不建议 
// const obj: Object = {
// 	name: '张三',
// 	age: 1231
// }

// 类型断言 
// 有时候你会遇到这样的情况，你会比TypeScript更了解某个值的详细信息
// 这个时候我们可以使用类型断言 来告诉ts具体的类型， 方便我们开发代码， 
// 避免一些类型检测问题
const num1: any = 1;

// 方式一
(<number>num1).toFixed();

// 方式二
(num1 as number).toFixed() 


// 这是一个节点
// let aaaa: any


// (aaaa as Element).classList.add